home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 1 / LSD Compendium Deluxe 1.iso / a / programming / assemblers / cas.lha / data / math.s < prev    next >
Encoding:
Text File  |  1992-08-11  |  1.3 KB  |  84 lines

  1. ;;; ARITHMETIC: Integer arithmetic routines.
  2. global ClearX:
  3.    1:
  4.       mov @R0, #0; inc R0
  5.    djnz R2, 1b
  6. ret
  7.  
  8. global IncX:
  9.    setb C
  10. global CarryX:
  11.    1:
  12.       mov A, @R0
  13.       addc A, #0
  14.       mov @R0, A; inc R0
  15.    djnz R2, 1b
  16. ret
  17.  
  18. global CopyX:
  19.    1:
  20.       mov A, @R1; inc R1
  21.       mov @R0, A; inc R0
  22.    djnz R2, 1b
  23. ret
  24.  
  25. global SubtractX:
  26.    clr C
  27.    1:
  28.       mov A, @R0
  29.       subb A, @R1; inc R1
  30.       mov @R0, A; inc R0
  31.    djnz R2, 1b
  32. ret
  33.  
  34. seg data
  35. global SizeX: ds 1
  36. global SizeY: ds 1
  37. global ArgX:  ds 1
  38. global ArgY:  ds 1
  39. global ArgZ:  ds 1
  40.  
  41. seg code
  42. global MultiplyX: ;;; The new multiplication algorithm R5 is the carry.
  43.    mov R5, #0
  44. MultiplyLoop:
  45.    mov R0, ArgX
  46.    mov A, @R0
  47.    mov R2, A
  48.    inc ArgX      ;;; R2 = *ArgX++;
  49.    mov R0, ArgZ
  50.    inc ArgZ      ;;; R0 = ArgZ++;
  51.    mov R1, ArgY
  52.    mov R3, SizeY
  53.    mov R4, #0
  54.    jz 1f
  55.    MulNibble:
  56.       mov A, R2
  57.       mov B, @R1
  58.       inc R1
  59.       mul AB     ;;; B:A = *R1++ * R2;
  60.       add A, R4
  61.       xch A, B
  62.       addc A, #0
  63.       xch A, B   ;;; B:A += R4;
  64.       add A, @R0
  65.       mov @R0, A
  66.       inc R0
  67.       mov A, B
  68.       addc A, #0
  69.       mov R4, A  ;;; R4:*R0++ = B:A + *R0;
  70.    djnz R3, MulNibble
  71.    mov R3, SizeX
  72.    mov A, R4
  73.    CarryBy1:
  74.       add A, @R0
  75.       mov @R0, A
  76.       inc R0     ;;; C:*R0++ += *R0 + A;
  77.    jnc 1f
  78.       mov A, #1
  79.    djnz R3, CarryBy1
  80.    inc R5
  81.    1:
  82. djnz SizeX, MultiplyLoop
  83. ret
  84.